/* 
jwt token 控制器
*/
'use strict';

const Controller = require('egg').Controller;

class CustjwtController extends Controller {
  async login() {
    // 接收表单的数据
    let formdata = this.ctx.request.body;
    let {result, token} = await this.service.custjwtSer.login(formdata);

    if(result === undefined || result.length === 0){
      this.ctx.body = {
        code: 401,
        message: '登录认证失败',
      }
    }else{
      this.ctx.body = {
        code: 200,
        message: '登录成功',
        result,
        token
      }
    }
    
  }

  // 解析JWT token
  async verifytoken(){
    // JWT token一般是客户端将它放在 request中的header.authorization
    let token = this.ctx.request.header.authorization;

    let decode = await this.service.custjwtSer.verifytoken(token);

    this.ctx.body = {
      message: 'JWT 解码',
      decode
    }

  }

  // localverifytoken 通过eggjs 中间件的方式 将jwt 注入到该控制器的方法中 （注入局部中间件） 注： 采用中间件的方式解码JWT ，必须在传送JWT token 的时候 一定要采用 Bearer + 1个空格 + token 格式发送
  async localverifytoken(){
    let jwtUser = this.ctx.state.user;
    await this.service.custjwtSer.localverifytoken(jwtUser);
    this.ctx.body = {
      message: '解析token',
      jwtUser
    }
  }
}

module.exports = CustjwtController;
